import matplotlib.pyplot as plt
import numpy as np

# 设置支持 Unicode 的字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei','DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False

# 间断点分类可视化
def plot_discontinuity_types():
    fig, axes = plt.subplots(1, 3, figsize=(15, 5))
    
    # 1. 可去间断点：f(x) = sin(x)/x
    x1 = np.linspace(-3*np.pi, 3*np.pi, 1000)
    x1 = x1[x1 != 0]  # 移除x=0点
    y1 = np.sin(x1) / x1
    
    axes[0].plot(x1, y1, 'b-', linewidth=2)
    axes[0].plot(0, 1, 'ro', markersize=8, fillstyle='none')  # 可补充的定义点
    axes[0].set_title('可去间断点: sin(x)/x 在 x=0')
    axes[0].grid(True)
    
    # 2. 跳跃间断点：符号函数
    x2 = np.linspace(-2, 2, 1000)
    y2 = np.sign(x2)
    axes[1].plot(x2[x2 < 0], y2[x2 < 0], 'r-', linewidth=2)
    axes[1].plot(x2[x2 > 0], y2[x2 > 0], 'r-', linewidth=2)
    axes[1].plot(0, -1, 'ro', markersize=6)
    axes[1].plot(0, 1, 'ro', markersize=6, fillstyle='none')
    axes[1].set_title('跳跃间断点: sgn(x) 在 x=0')
    axes[1].grid(True)
    
    # 3. 第二类间断点：f(x) = 1/x
    x3 = np.linspace(-2, -0.1, 100)
    x3_pos = np.linspace(0.1, 2, 100)
    axes[2].plot(x3, 1/x3, 'r-', linewidth=2)
    axes[2].plot(x3_pos, 1/x3_pos, 'r-', linewidth=2)
    axes[2].set_ylim(-10, 10)
    axes[2].set_title('第二类间断点: 1/x 在 x=0')
    axes[2].grid(True)
    
    plt.tight_layout()
    plt.show()

plot_discontinuity_types()
